±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcnblogs£¬½éÉÜÁËMySqlµÄ¸´ÖÆ£¬´´½¨ËùÓõĸ´ÖÆÕ˺ţ¬ÅäÖÃmaster£¬ÅäÖÃslaveµÄ¹ý³Ì¡£ |
|
Ò»¡¢MySqlµÄ¸´ÖÆ
Êý¾Ý¿â¸´ÖƵĻù±¾ÎÊÌâ¾ÍÊÇÈÃһ̨·þÎñÆ÷µÄÊý¾ÝÓëÆäËû·þÎñÆ÷±£³Öͬ²½¡£MySqlĿǰ֧³ÖÁ½ÖÖ¸´ÖÆ·½Ê½£º»ùÓÚÐеĸ´ÖƺͻùÓÚÓï¾äµÄ¸´ÖÆ£¬ÕâÁ½ÕߵĻù±¾¹ý³Ì¶¼ÊÇÔÚÖ÷¿âÉϼǼ¶þ½øÖƵÄÈÕÖ¾¡¢ÔÚ±¸¿âÉÏÖØ·ÅÈÕÖ¾µÄ·½Ê½À´ÊµÏÖÒì²½µÄÊý¾Ý¸´ÖÆ¡£Æä¹ý³Ì·ÖΪÈý²½£º
(1)master½«¸Ä±ä¼Ç¼µ½¶þ½øÖÆÈÕÖ¾(binary log)ÖУ¨ÕâЩ¼Ç¼½Ð×ö¶þ½øÖÆÈÕ־ʼþ£¬binary
log events £©£»
(2)slave½«masterµÄbinary log events¿½±´µ½ËüµÄÖмÌÈÕÖ¾(relay log)£»
(3)slaveÖØ×öÖмÌÈÕÖ¾ÖеÄʼþ£¬½«¸Ä±ä·´Ó³Ëü×Ô¼ºµÄÊý¾Ý¡£
![] (http: //image.wenzhihuai.com
/images /20171118040843.png)
¸Ã¹ý³ÌµÄµÚÒ»²¿·Ö¾ÍÊÇmaster¼Ç¼¶þ½øÖÆÈÕÖ¾¡£ÔÚÿ¸öÊÂÎñ¸üÐÂÊý¾ÝÍê³É֮ǰ£¬masterÔÚ¶þÈÕÖ¾¼Ç¼ÕâЩ¸Ä±ä¡£MySQL½«ÊÂÎñ´®ÐеÄдÈë¶þ½øÖÆÈÕÖ¾£¬¼´Ê¹ÊÂÎñÖеÄÓï¾ä¶¼Êǽ»²æÖ´Ðеġ£ÔÚʼþдÈë¶þ½øÖÆÈÕÖ¾Íê³Éºó£¬master֪ͨ´æ´¢ÒýÇæÌá½»ÊÂÎñ¡£
ÏÂÒ»²½¾ÍÊÇslave½«masterµÄbinary log¿½±´µ½Ëü×Ô¼ºµÄÖмÌÈÕÖ¾¡£Ê×ÏÈ£¬slave¿ªÊ¼Ò»¸ö¹¤×÷Ï̡߳ª¡ªI/OÏ̡߳£I/OÏß³ÌÔÚmasterÉÏ´ò¿ªÒ»¸öÆÕͨµÄÁ¬½Ó£¬È»ºó¿ªÊ¼binlog
dump process¡£Binlog dump process ´Ómaster µÄ¶þ½øÖÆÈÕÖ¾ÖжÁȡʼþ£¬Èç¹ûÒѾ¸úÉÏmaster£¬Ëü»á˯Ãß²¢µÈ´ýmaster²úÉúеÄʼþ¡£I/OÏ߳̽«ÕâЩʼþдÈëÖмÌÈÕÖ¾¡£
SQL slave thread´¦Àí¸Ã¹ý³ÌµÄ×îºóÒ»²½¡£SQLÏ̴߳ÓÖмÌÈÕÖ¾¶Áȡʼþ£¬¸üÐÂslaveµÄÊý¾Ý£¬Ê¹ÆäÓëmaster
ÖеÄÊý¾ÝÒ»Ö¡£Ö»Òª¸ÃÏß³ÌÓëI/OÏ̱߳£³ÖÒ»Ö£¬ÖмÌÈÕ־ͨ³£»áλÓÚOSµÄ»º´æÖУ¬ËùÒÔÖмÌÈÕÖ¾µÄ¿ªÏúºÜС¡£
´ËÍ⣬ÔÚmasterÖÐÒ²ÓÐÒ»¸ö¹¤×÷Ị̈߳ººÍÆäËüMySQLµÄÁ¬½ÓÒ»Ñù£¬slaveÔÚmasterÖдò¿ªÒ»¸öÁ¬½ÓÒ²»áʹµÃmaster
¿ªÊ¼Ò»¸öÏ̡߳£¸´Öƹý³ÌÓÐÒ»¸öºÜÖØÒªµÄÏÞÖÆ¡ª¡ª¸´ÖÆÔÚslaveÉÏÊÇ´®Ðл¯µÄ£¬Ò²¾ÍÊÇ˵masterÉϵIJ¢ÐиüвÙ×÷²»ÄÜÔÚslaveÉϲ¢ÐвÙ×÷¡£
MySqlµÄ»ù±¾¸´ÖÆ·½Ê½ÓÐÖ÷´Ó¸´ÖÆ¡¢Ö÷Ö÷¸´ÖÆ£¬Ö÷Ö÷¸´ÖƼ´°ÑÖ÷´Ó¸´ÖƵÄÅäÖõ¹¹ýÀ´ÔÙÅäÖÃÒ»±é¼´¿É£¬ÏÂÃæµÄÅäÖÃÔòÊÇÖ÷´Ó¸´ÖƵĹý³Ì£¬µ½Ê±ºò¿É×ÔÐиÄΪÖ÷Ö÷¸´ÖÆ¡£ÆäËûµÄ¼Ü¹¹È磺һÖ÷¿â¶à±¸¿â¡¢»·Ðθ´ÖÆ¡¢Ê÷»òÕß½ð×ÖËþÐͶ¼ÊÇ»ùÓÚÕâÁ½ÖÖ·½Ê½£¬¿É²Î¿¼¡¶¸ßÐÔÄÜMySql¡·¡£
¶þ¡¢ÅäÖùý³Ì
2.1 ´´½¨ËùÓõĸ´ÖÆÕ˺Å
ÓÉÓÚÊǸö×Ô¼ºµÄÐ¡ÍøÕ¾£¬¾Í²»×ö¹ý¶àµÄ²Ù×÷ÁË£¬Ö±½ÓʹÓÃrootÕ˺Å
2.2 ÅäÖÃmaster
½ÓÏÂÀ´Òª¶ÔmysqlµÄserverID£¬ÈÕ־λÖ㬸´ÖÆ·½Ê½µÈ½øÐвÙ×÷£¬Ê¹ÓÃvim´ò¿ªmy.cnf¡£
[client]
default- character-set=utf8
[mysqld]
character_set_server=utf8
init_connect = SET NAMES utf8
datadir=/var/lib/mysql
socket=/var /lib/mysql/mysql.sock
symbolic-links =0
log-error=/var /log/mysqld.log
pid-file=/var /run/mysqld/mysqld.pid
# master
log-bin=mysql-bin
# ÉèΪ»ùÓÚÐеĸ´ÖÆ
binlog-format=ROW
# ÉèÖÃserverµÄΨһid
server-id=2
# ºöÂÔµÄÊý¾Ý¿â£¬²»Ê¹Óñ¸·Ý
binlog- ignore-db=information_schema
binlog- ignore-db=cluster
binlog- ignore-db=mysql
# Òª½øÐб¸·ÝµÄÊý¾Ý¿â
binlog-do-db=myblog |
ÖØÆôMysqlÖ®ºó£¬²é¿´Ö÷¿â״̬£¬show master status¡£

ÆäÖУ¬FileΪÈÕÖ¾Îļþ£¬Ö¸¶¨Slave´ÓÄĸöÈÕÖ¾Îļþ¿ªÊ¼¶Á¸´ÖÆÊý¾Ý£¬PositionÎªÆ«ÒÆ£¬´ÓÄĸöPOSITIONºÅ¿ªÊ¼¶Á£¬Binlog_Do_DBΪҪ±¸·ÝµÄÊý¾Ý¿â¡£
2.3 ÅäÖÃslave
´Ó¿âµÄÅäÖøúÖ÷¿âÀàËÆ£¬vim /etc/my.cnfÅäÖôӿâÐÅÏ¢¡£
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
init_connect= SET NAMES utf8
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# slave
log-bin=mysql-bin
# ·þÎñÆ÷Ψһid
server-id=3
# ²»±¸·ÝµÄÊý¾Ý¿â
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql
# ÐèÒª±¸·ÝµÄÊý¾Ý¿â
replicate-do-db=myblog
# ÆäËûÏà¹ØÐÅÏ¢
slave-skip-errors=all
slave-net-timeout=60
# ¿ªÆôÖмÌÈÕÖ¾
relay_log = mysql-relay-bin
#
log_slave_updates = 1
# ·ÀÖ¹¸Ä±äÊý¾Ý
read_only = 1 |
ÖØÆôslave£¬Í¬Ê±Æô¶¯¸´ÖÆ£¬»¹ÐèÒªµ÷ÕûÒ»ÏÂÃüÁî¡£
mysql> CHANGE
MASTER TO MASTER_HOST = '119.23.46.71', MASTER
_USER = 'root', MASTER_ PASSWORD = 'helloroot',
MASTER_ PORT = 3306, MASTER_ LOG_FILE = 'mysql-bin.
000009 ' , MASTER_LOG_ POS = 346180; |
¿ÉÒÔ¿´¼ûslaveÒѾ¿ªÊ¼½øÐÐͬ²½ÁË¡£ÎÒÃÇʹÓÃshow slave
status\GÀ´²é¿´slaveµÄ״̬¡£

ÆäÖÐÈÕÖ¾ÎļþºÍPOSITION²»Ò»ÖÂÊǺÏÀíµÄ£¬ÅäÖúÃÁ˵ϰ£¬¼´Ê¹ÖØÆô£¬Ò²²»»áÓ°Ïìµ½Ö÷´Ó¸´ÖƵÄÅäÖá£
ijÌìÔÚGithubÉÏÆ¯ÓΣ¬·¢ÏÖÁ˰¢ÀïµÄcanal£¬Í¬Ê±²ÅÖªµÀÉÏÃæÕâ¸öÒµÎñÊǽÐÒìµØ¿ç»ú·¿Í¬²½£¬ÔçÆÚ£¬°¢Àï°Í°ÍB2B¹«Ë¾ÒòΪ´æÔÚº¼ÖݺÍÃÀ¹úË«»ú·¿²¿Ê𣬴æÔÚ¿ç»ú·¿Í¬²½µÄÒµÎñÐèÇó¡£²»¹ýÔçÆÚµÄÊý¾Ý¿âͬ²½ÒµÎñ£¬Ö÷ÒªÊÇ»ùÓÚtriggerµÄ·½Ê½»ñÈ¡ÔöÁ¿±ä¸ü£¬²»¹ý´Ó2010Ä꿪ʼ£¬°¢Àïϵ¹«Ë¾¿ªÊ¼Ö𲽵ij¢ÊÔ»ùÓÚÊý¾Ý¿âµÄÈÕÖ¾½âÎö£¬»ñÈ¡ÔöÁ¿±ä¸ü½øÐÐͬ²½£¬ÓÉ´ËÑÜÉú³öÁËÔöÁ¿¶©ÔÄ&Ïû·ÑµÄÒµÎñ¡£ÏÂÃæÊÇ»ù±¾µÄÔÀí£º

ÔÀíÏà¶Ô±È½Ï¼òµ¥£º
1.canalÄ£Äâmysql slaveµÄ½»»¥ÐÒ飬αװ×Ô¼ºÎªmysql slave£¬Ïòmysql
master·¢ËÍdumpÐÒé
2.mysql masterÊÕµ½dumpÇëÇ󣬿ªÊ¼ÍÆËÍbinary log¸øslave(Ò²¾ÍÊÇcanal)
3.canal½âÎöbinary log¶ÔÏó(ÔʼΪbyteÁ÷)
ÆäÖУ¬ÅäÖùý³ÌÈçÏ£ºhttps://github.com/alibaba/canal£¬¿ÉÒÔ´îÅäZookeeperʹÓá£ÔÚZKUIÖÐÄܹ»²é¿´µ½½Úµã£º

Ò»°ãÇé¿öÏ£¬»¹ÒªÅäºÏ°¢ÀïµÄÁíÒ»¸ö¿ªÔ´²úƷʹÓÃotter£¬Ïà¹ØÎĵµ»¹ÊÇÕÒÕÒGitHub°É£¬¸öÈ˴ÍêÁËÖ®ºó£¬ÓÃÆðÀ´»¹ÊDz»ÈçÖ±½ÓʹÓÃmysqlµÄÖ÷Ö÷¸´ÖÆ£¬¶øÇÒÒìµØ»ú·¿Í¬²½ÕâÖÖ´óÆóÒµ²ÅÓеÄÒµÎñ¡£ |